<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie du plugin «Partager» pour Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class pPartagerEmail
{
	
	
	protected $core;
	
	
	protected $statut;
	protected $message;
	
	
	public static function partagerEmail($args)
	{
		global $core;
		$core->initAuth();
		
		# Chargement de la langue
		$langue = $core->site->getPropriete('site_langue', 'core');
		if(!empty($_GET['langue']) && array_key_exists($_GET['langue'], $core->getLangues()))
		{
			$langue = $_GET['langue'];
		}
		elseif(!empty($_SESSION['pPartagerEmail_langue']) && array_key_exists($_GET['langue'], $core->getLangues()))
		{
			$langue = $_SESSION['pPartagerEmail_langue'];
		}
		
		$core->setLangue($langue);
		$_SESSION['pPartagerEmail_langue'] = $langue;
		$core->chargerFichierLangue('main', CP_CHEMIN_PLUGINS.'/partager/langues/');
		
		# Page de partage par email
		$partagerEmail = new self($core);
		$partagerEmail->traiterFormulaire();
		$core->detruireNonce('pPartagerEmail');
		$partagerEmail->afficherPage();	
	}
	
	
	public function __construct($core)
	{
		$this->core	= &$core;
		$this->statut = 'init';
	}
	
	public function traiterFormulaire()
	{

		if($_POST['action'] == 'pPartagerEmail' && $this->core->verifierNonce('pPartagerEmail', $_POST['nonce']))
		{

			# Vérification des données
			
			$_POST['email_dest'] = trim($_POST['email_dest']);
			$_POST['email_expe'] = trim($_POST['email_expe']);
			$_POST['nom_expe'] = trim($_POST['nom_expe']);
			
			if(empty($_POST['email_dest'])) {
				$this->message = __('Vous devez indiquer un destinataire.');
				return;
			} 
			
			if(empty($_POST['email_expe'])) {
				$this->message = __('Vous devez indiquer votre adresse électronique.');
				return;
			} 
			
			if(empty($_POST['nom_expe'])) {
				$this->message = __('Vous devez indiquer votre nom.');
				return;
			}
			
			# Traiter les adresses des destinataires
			$emails_dest = explode(',', $_POST['email_dest']);
			$nb_dest = count($emails_dest);
			if($nb_dest > 5) {
				$this->message = __('Vous ne pouvez pas indiquer plus de 5 destinataires.');
				return;
			}
			
			for($i=0; $i<$nb_dest; $i++)
			{
				$emails_dest[$i] = trim($emails_dest[$i]);
				
				if(empty($emails_dest[$i])) {
					unset($emails_dest[$i]);
					$i--;
				} elseif(!text::isEmail($emails_dest[$i])) {
					$this->message = __('Vous avez indiqué un destinataire invalide.');
					return;
				}
				
			}
			
			if(count($emails_dest) == 0) {
				$this->message = __('Vous devez indiquer un destinataire.');
				return;
			}
			
			if(!text::isEmail($_POST['email_expe'])) {
				$this->message = __('Votre adresse électronique ne semble pas valide.');
				return;
			}
			
			# Envoi du message
			$site_titre = $this->core->site->getPropriete('site_titre');
			$site_description = $this->core->site->getPropriete('site_description');
			$objet = mail::B64Header(sprintf(__('[%s] Suggestion de lecture'), $site_titre));
			$message =
			'<p>'.__('Bonjour,').'</p>'.
			'<p>'.sprintf(__('%s a visité le site %s et vous recommande la lecture de la page suivante:'), '<strong>'.html::escapeHTML($_POST['nom_expe']).'</strong>', '<strong>'.html::escapeHTML($site_titre).'</strong>').'</p>'.
			'<p><a href="'.$_SESSION['pPartagerEmail_url'].'">'.$_SESSION['pPartagerEmail_url'].'</a></p>';
			
			if(!empty($_POST['message'])) {
				
				$filter = new htmlFilter;
				$wiki2xhtml = new wiki2xhtml;
				$wiki2xhtml->setOpts(array(
					'active_title' => 0,
					'active_setext_title' => 0,
					'active_hr' => 0,
					'active_lists' => 1,
					'active_quote' => 1,
					'active_pre' => 1,
					'active_empty' => 0,
					'active_auto_br' => 1,
					'active_auto_urls' => 1,
					'active_urls' => 0,
					'active_auto_img' => 0,
					'active_img' => 0,
					'active_anchor' => 0,
					'active_em' => 0,
					'active_strong' => 0,
					'active_br' => 0,
					'active_q' => 0,
					'active_code' => 1,
					'active_acronym' => 0,
					'active_ins' => 0,
					'active_del' => 0,
					'active_footnotes' => 0,
					'active_wikiwords' => 0,
					'active_macros' => 0,
					'parse_pre' => 0,
					'active_fr_syntax' => 0
				));
				
				$_POST['message'] = $wiki2xhtml->transform($_POST['message']);
				$_POST['message'] = trim($filter->apply($_POST['message']));
				
				$message.=
				'<p>'.__('Voici son message à votre intention:').'</p>'.
				$_POST['message'];
				
			}
			
			$message.=
			'<p>...................................<br/><strong>'.$site_titre.'</strong><br/>'.
			'<a href="'.CP_URL_PUBLIQUE.'">'.CP_URL_PUBLIQUE.'</a><br/><br/>'.$site_description.'<br/>...................................</p>';
					
			$headers[] = 'From: '.$_POST['nom_expe'].' <'.$_POST['email_expe'].'>';
			$headers[] = 'Content-Type: text/html; charset=UTF-8;';		
			
			foreach($emails_dest as $email_dest)
			{
				mail::sendMail($email_dest,$objet,$message,$headers);
			}
			
			$this->statut = 'ok';
			
		}
		elseif(($url = urldecode($_GET['url'])) != '' && strpos($url, CP_URL_PUBLIQUE) === 0)
		{
			$_SESSION['pPartagerEmail_url'] = $_GET['url'];
		}
		
	}
	
	
	public function afficherPage()
	{

		if(!isset($_SESSION['pPartagerEmail_url'])) {
			http::head(412,'Precondition Failed');
			header('Content-Type: text/plain');
			echo "Precondition Failed";
			# Exits immediately the application to preserve the server.
			exit;
		}
		
		$titre = __('Partager par courrier électronique');
		
		switch($this->statut):
		
			case ok:
				$html = 
				'<h1>'.__('Partager par courrier électronique').'</h1>'.
				'<p>'.__('Votre message a été envoyé avec succès.').'</p>'.
				'<p><a href="#" onclick="window.close();">'.__('Fermer la fenêtre').'</a></p>';	
			break;
		
			default:
								
				$html =
				'<form action="'.CP_URL_PUBLIQUE_RELATIVE.'cp/plugins/pPartager/email" method="post">'.
					$this->core->nonceHTML('pPartagerEmail').
					form::hidden('action', 'pPartagerEmail').
					'<h1>'.__('Partager par courrier électronique').'</h1>'.
					$this->afficherMessage().
					'<p>'.
						'<label for="email_dest">'.__('Adresse électronique de votre ami').' <span class="requis">*</span></label>'.
						form::field('email_dest', 40, 255, html::escapeHTML($_POST['email_dest'])).
						'<span class="aide_formulaire">'.__('Vous pouvez entrer jusqu\'à cinq adresses séparées par des virgules.').'</span>'.			
					'</p>'.
					'<p>'.
						'<label for="email_expe">'.__('Votre adresse électronique').' <span class="requis">*</span></label>'.
						form::field('email_expe', 40, 255, html::escapeHTML($_POST['email_expe'])).
					'</p>'.
					'<p>'.
						'<label for="nom_expe">'.__('Votre nom').' <span class="requis">*</span></label>'.
						form::field('nom_expe', 40, 255, html::escapeHTML($_POST['nom_expe'])).
					'</p>'.
					'<p>'.
						'<label for="message">'.__('Votre message personnalisé').'</label>'.
						form::textarea('message', 40, 10, html::escapeHTML($_POST['message'])).
						'<span class="aide_formulaire">'.__('Le lien vers la page recommandée sera automatiquement inclus avant votre message personnalisé.').'</span>'.
					'</p>'.
					'<p>'.
						'<input type="submit" value="'.__('Envoyer').'" />'.
					'</p>'.
				'</form>';
			break;
			
		endswitch;
		
		
		echo $this->wrapContenu($titre, $html);
		
	}
	
	
	public function wrapContenu($titre, $html)
	{
		
		return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="'.CP_URL_PUBLIQUE_RELATIVE.'cp/plugins/partager/email.css" media="screen" />
	<title>'.$titre.'</title>
</head>
<body>'.$html.'</body>
</html>';
		
	}
	
	
	public function afficherMessage()
	{
		if(!empty($this->message))
		{
			return '<p class="erreur">'.$this->message.'</p>';
		}
	}

	
}

?>